Hermes Agent :git worktree 让每个 agent 有自己的工作空间
Hermes Agent :git worktree 让每个 agent 有自己的工作空间
来源:htmlDecode("量子智元")
原文链接:https://mp.weixin.qq.com/s/odcLehs-3OaG7Uu1gSwSZA
上周我在用 Hermes 测一个功能,开了两个终端,各跑一个 agent,让它们分别处理同一个仓库的不同需求。跑了没多久,其中一个崩了,报文件不存在。查下去才发现,两个 agent 都在操作同一批文件,一个改着改着把另一个正在用的文件删了。
这个场景,用 git worktree 可以根本性地解决。
问题出在哪
Hermes 把当前工作目录当作项目根目录。你在哪个目录跑 hermes,它就把那里的文件当作工作范围。两个 agent 跑在同一个 checkout 里,就等于两个人手都伸进同一堆文件——谁先谁后都乱,更别说一个删了另一个正在读的。
问题本质不是 agent 不聪明,是它们没有各自的工作空间。
解法就是 git worktree。一个命令给每个 agent 开一个独立目录,各自在自己的分支上操作,互不干扰。
git worktree 是什么
很多人用 git 用了很多年,不知道这个功能。说白了,worktree 允许你在一个仓库里,同时 checkout 多个分支到不同目录。底层还是同一个 .git,但每个目录有自己的分支、自己的工作区,改了互相不影响。
操作很简单:
# 在仓库根目录
cd /path/to/your/repo
创建新分支 + 新目录
git worktree add ../repo-feature feature/hermes-experiment
跑完之后,../repo-feature 目录就出现了,里面 checkout 的是 feature/hermes-experiment 分支。进去跑 hermes,它就只会动这个目录的文件。
多个 agent 并行的正确姿势
如果要同时跑两个 agent 做不同的事:
git worktree add ../repo-experiment-a feature/hermes-a
git worktree add ../repo-experiment-b feature/hermes-b
终端 1
cd ../repo-experiment-a && hermes
终端 2
cd ../repo-experiment-b && hermes
两个 hermes 进程,各自的分支,各自的目录,各自的 /rollback 历史。做了什么,最后 merge 还是丢弃,自己决定。
懒人方案:hermes -w
如果觉得手动建 worktree 麻烦,Hermes 有个内置 -w 参数,直接在当前仓库下自动创建一个临时 worktree,开一个独立分支,然后在里面跑:
cd /path/to/your/repo
hermes -w
它会自动在 .worktrees/ 目录下建一个隔离环境,分支名类似 hermes/hermes-abc123。跑完你可以 merge,也可以直接扔掉。开多个终端各跑一次 hermes -w,每个都有自己的 worktree,不用手动管。
一行命令的代价是:完全不用考虑冲突的问题。
收尾
用完之后清理也很简单:
cd /path/to/your/repo
git worktree remove ../repo-feature
有未提交改动时它会拒绝,必须加 --force。删掉目录不会自动删分支,分支该留的留,该删的自己 git branch -d。
我现在跑多个 agent 的标准做法就是 hermes -w,每个任务一个 worktree,做完之后决定要不要 merge。比起之前在同一个目录里跑两个 agent 然后互相踩脚,这个心智负担小太多了。
你现在跑多个 agent 的时候怎么隔离的?评论区告诉我。
⭐点赞、转发、关注和推荐一键三连⭐